/*
 * @Author: ZhanXie
 * @Date: 2019-11-29 14:44:31
 * @LastEditors: ZhanXie
 * @LastEditTime: 2019-11-29 15:14:24
 * @Description: redis 底层封装
 * @FilePath: /node-demo/blog-origin/src/db/redis.js
 */
const redis = require('redis')
const { REDIS_CONF } = require('../conf/db')

// 创建客户端
const redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host)

// 错误监听
redisClient.on('error', err => {
  console.error(err)
})

function set(key, val) {
  if (typeof val === 'object') {
    val = JSON.stringify(val)
  }
  redisClient.set(key, val, redis.print)
}

function get(key) {
  const promise = new Promise((resolve, reject) => {
    redisClient.get(key, (err, val) => {
      if (err) {
        reject(err)
        return
      }
      if (val == null) {
        // 如果没有该 key 的时候会返回 null 这时候跟着返回 null 就行
        resolve(null)
        return
      }
      try {
        // 兼容 JSON.stringify 先尝试解析,看看 val 是不是被序列化,如果是则解析后返回,否则直接返回
        resolve(JSON.parse(val))
      } catch (error) {
        resolve(val)
      }
      // 连接完不断开 让他一直连着就可以了
      // redisClient.quit()
    })
  })
  return promise
}

module.exports = {
  set,
  get
}